package DoblePointer;//给定一个非空字符串 s，最多删除一个字符。判断是否能成为回文字符串。
//
// 
//
// 示例 1: 
//
// 
//输入: s = "aba"
//输出: true
// 
//
// 示例 2: 
//
// 
//输入: s = "abca"
//输出: true
//解释: 你可以删除c字符。
// 
//
// 示例 3: 
//
// 
//输入: s = "abc"
//输出: false 
//
// 
//
// 提示: 
//
// 
// 1 <= s.length <= 10⁵ 
// s 由小写英文字母组成 
// 
// Related Topics 贪心 双指针 字符串 👍 410 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class validPalindrome2 {
    public boolean validPalindrome(String s) {
        int n = s.length();
        char[] chars = s.toCharArray();
        int left = 0, right = n-1;
        while(left<right){
            //双指针遍历，当遇到不相同的字符时，分别判断删除两个指针位置字符之后的字符串是否是回文
            if(chars[left]!=chars[right]){
                return isHui(s,left,right-1)||isHui(s,left+1,right);
            }
            left++;
            right--;

        }
        return true;


    }

    boolean isHui(String s, int left, int right){
        while(left<right){
            if(s.charAt(left)!=s.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
